Skip to content

Use umbrellas instead of direct includes in react/runtime module (#58550) - #58550

Open
j-piasecki wants to merge 2 commits into
react:mainfrom
j-piasecki:export-D120316197
Open

j-piasecki wants to merge 2 commits into
react:mainfrom
j-piasecki:export-D120316197

Conversation

@j-piasecki

@j-piasecki j-piasecki commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary:

Changelog: [Internal]

Part of the C++ stable API migration to umbrella includes. Fixes tier reachability violations in the react/runtime module.

The headers in this module are "for frameworks" tier (they include <react/cxxstableapi/FrameworksGuard.h>), but they reached public-tier modules through fine-grained includes: <ReactCommon/CallInvoker.h>, <ReactCommon/SchedulerPriority.h>, <ReactCommon/RuntimeExecutor.h> and <cxxreact/JSBigString.h>. Each of these is protected by <react/cxxstableapi/UmbrellaGuard.h>. Exported headers are preprocessed in the consumer's translation unit, so a consumer building with RN_STRICT_API would hit the guard through these transitive includes. RN_ALLOW_FRAMEWORKS does not suppress the guard.

This change switches the five affected headers (BridgelessNativeMethodCallInvoker.h, BufferedRuntimeExecutor.h, CallInvokerImpl.h, ReactInstance.h, TimerManager.h) to the <React/CallInvoker.h>, <React/RuntimeExecutor.h> and <React/JSBigString.h> umbrellas. Each umbrella scopes RN_UMBRELLA_CONTEXT around its includes, so the guard accepts them. <ReactCommon/SchedulerPriority.h> has no include of its own anymore because <React/CallInvoker.h> re-exports it. The umbrellas are supersets of the headers they replace, so every previously visible declaration stays available and there is no functional change.

Out of scope: ReactInstance.cpp and the module's C++ tests keep the fine-grained includes. They are compiled only within React Native's own build and are never preprocessed by consumers, which matches the umbrellas' documented guidance. Other modules are migrated in separate changes.

Reviewed By: cortinico

Differential Revision: D120316197

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Sep 16, 2026
@j-piasecki
j-piasecki force-pushed the export-D120316197 branch 2 times, most recently from 309779a to e11ff37 Compare September 21, 2026 06:43
@meta-codesync

meta-codesync Bot commented Sep 22, 2026

Copy link
Copy Markdown

@j-piasecki has exported this pull request. If you are a Meta employee, you can view the originating Diff in D120316197.

j-piasecki added a commit to j-piasecki/react-native that referenced this pull request Sep 29, 2026
…ct#58550)

Summary:

Changelog: [Internal]

Part of the C++ stable API migration to umbrella includes. Fixes tier reachability violations in the `react/runtime` module.

The headers in this module are "for frameworks" tier (they include `<react/cxxstableapi/FrameworksGuard.h>`), but they reached public-tier modules through fine-grained includes: `<ReactCommon/CallInvoker.h>`, `<ReactCommon/SchedulerPriority.h>`, `<ReactCommon/RuntimeExecutor.h>` and `<cxxreact/JSBigString.h>`. Each of these is protected by `<react/cxxstableapi/UmbrellaGuard.h>`. Exported headers are preprocessed in the consumer's translation unit, so a consumer building with `RN_STRICT_API` would hit the guard through these transitive includes. `RN_ALLOW_FRAMEWORKS` does not suppress the guard.

This change switches the five affected headers (`BridgelessNativeMethodCallInvoker.h`, `BufferedRuntimeExecutor.h`, `CallInvokerImpl.h`, `ReactInstance.h`, `TimerManager.h`) to the `<React/CallInvoker.h>`, `<React/RuntimeExecutor.h>` and `<React/JSBigString.h>` umbrellas. Each umbrella scopes `RN_UMBRELLA_CONTEXT` around its includes, so the guard accepts them. `<ReactCommon/SchedulerPriority.h>` has no include of its own anymore because `<React/CallInvoker.h>` re-exports it. The umbrellas are supersets of the headers they replace, so every previously visible declaration stays available and there is no functional change.

Out of scope: `ReactInstance.cpp` and the module's C++ tests keep the fine-grained includes. They are compiled only within React Native's own build and are never preprocessed by consumers, which matches the umbrellas' documented guidance. Other modules are migrated in separate changes.

Differential Revision: D120316197
@meta-codesync meta-codesync Bot changed the title Use umbrellas instead of direct includes in react/runtime module Use umbrellas instead of direct includes in react/runtime module (#58550) Sep 29, 2026
j-piasecki added a commit to j-piasecki/react-native that referenced this pull request Sep 29, 2026
…ct#58550)

Summary:
Pull Request resolved: react#58550

Changelog: [Internal]

Part of the C++ stable API migration to umbrella includes. Fixes tier reachability violations in the `react/runtime` module.

The headers in this module are "for frameworks" tier (they include `<react/cxxstableapi/FrameworksGuard.h>`), but they reached public-tier modules through fine-grained includes: `<ReactCommon/CallInvoker.h>`, `<ReactCommon/SchedulerPriority.h>`, `<ReactCommon/RuntimeExecutor.h>` and `<cxxreact/JSBigString.h>`. Each of these is protected by `<react/cxxstableapi/UmbrellaGuard.h>`. Exported headers are preprocessed in the consumer's translation unit, so a consumer building with `RN_STRICT_API` would hit the guard through these transitive includes. `RN_ALLOW_FRAMEWORKS` does not suppress the guard.

This change switches the five affected headers (`BridgelessNativeMethodCallInvoker.h`, `BufferedRuntimeExecutor.h`, `CallInvokerImpl.h`, `ReactInstance.h`, `TimerManager.h`) to the `<React/CallInvoker.h>`, `<React/RuntimeExecutor.h>` and `<React/JSBigString.h>` umbrellas. Each umbrella scopes `RN_UMBRELLA_CONTEXT` around its includes, so the guard accepts them. `<ReactCommon/SchedulerPriority.h>` has no include of its own anymore because `<React/CallInvoker.h>` re-exports it. The umbrellas are supersets of the headers they replace, so every previously visible declaration stays available and there is no functional change.

Out of scope: `ReactInstance.cpp` and the module's C++ tests keep the fine-grained includes. They are compiled only within React Native's own build and are never preprocessed by consumers, which matches the umbrellas' documented guidance. Other modules are migrated in separate changes.

Differential Revision: D120316197
j-piasecki added a commit to j-piasecki/react-native that referenced this pull request Sep 29, 2026
…ct#58550)

Summary:
Pull Request resolved: react#58550

Changelog: [Internal]

Part of the C++ stable API migration to umbrella includes. Fixes tier reachability violations in the `react/runtime` module.

The headers in this module are "for frameworks" tier (they include `<react/cxxstableapi/FrameworksGuard.h>`), but they reached public-tier modules through fine-grained includes: `<ReactCommon/CallInvoker.h>`, `<ReactCommon/SchedulerPriority.h>`, `<ReactCommon/RuntimeExecutor.h>` and `<cxxreact/JSBigString.h>`. Each of these is protected by `<react/cxxstableapi/UmbrellaGuard.h>`. Exported headers are preprocessed in the consumer's translation unit, so a consumer building with `RN_STRICT_API` would hit the guard through these transitive includes. `RN_ALLOW_FRAMEWORKS` does not suppress the guard.

This change switches the five affected headers (`BridgelessNativeMethodCallInvoker.h`, `BufferedRuntimeExecutor.h`, `CallInvokerImpl.h`, `ReactInstance.h`, `TimerManager.h`) to the `<React/CallInvoker.h>`, `<React/RuntimeExecutor.h>` and `<React/JSBigString.h>` umbrellas. Each umbrella scopes `RN_UMBRELLA_CONTEXT` around its includes, so the guard accepts them. `<ReactCommon/SchedulerPriority.h>` has no include of its own anymore because `<React/CallInvoker.h>` re-exports it. The umbrellas are supersets of the headers they replace, so every previously visible declaration stays available and there is no functional change.

Out of scope: `ReactInstance.cpp` and the module's C++ tests keep the fine-grained includes. They are compiled only within React Native's own build and are never preprocessed by consumers, which matches the umbrellas' documented guidance. Other modules are migrated in separate changes.

Differential Revision: D120316197
j-piasecki added a commit to j-piasecki/react-native that referenced this pull request Sep 29, 2026
…ct#58550)

Summary:

Changelog: [Internal]

Part of the C++ stable API migration to umbrella includes. Fixes tier reachability violations in the `react/runtime` module.

The headers in this module are "for frameworks" tier (they include `<react/cxxstableapi/FrameworksGuard.h>`), but they reached public-tier modules through fine-grained includes: `<ReactCommon/CallInvoker.h>`, `<ReactCommon/SchedulerPriority.h>`, `<ReactCommon/RuntimeExecutor.h>` and `<cxxreact/JSBigString.h>`. Each of these is protected by `<react/cxxstableapi/UmbrellaGuard.h>`. Exported headers are preprocessed in the consumer's translation unit, so a consumer building with `RN_STRICT_API` would hit the guard through these transitive includes. `RN_ALLOW_FRAMEWORKS` does not suppress the guard.

This change switches the five affected headers (`BridgelessNativeMethodCallInvoker.h`, `BufferedRuntimeExecutor.h`, `CallInvokerImpl.h`, `ReactInstance.h`, `TimerManager.h`) to the `<React/CallInvoker.h>`, `<React/RuntimeExecutor.h>` and `<React/JSBigString.h>` umbrellas. Each umbrella scopes `RN_UMBRELLA_CONTEXT` around its includes, so the guard accepts them. `<ReactCommon/SchedulerPriority.h>` has no include of its own anymore because `<React/CallInvoker.h>` re-exports it. The umbrellas are supersets of the headers they replace, so every previously visible declaration stays available and there is no functional change.

Out of scope: `ReactInstance.cpp` and the module's C++ tests keep the fine-grained includes. They are compiled only within React Native's own build and are never preprocessed by consumers, which matches the umbrellas' documented guidance. Other modules are migrated in separate changes.

Differential Revision: D120316197
j-piasecki added a commit to j-piasecki/react-native that referenced this pull request Sep 29, 2026
…ct#58550)

Summary:

Changelog: [Internal]

Part of the C++ stable API migration to umbrella includes. Fixes tier reachability violations in the `react/runtime` module.

The headers in this module are "for frameworks" tier (they include `<react/cxxstableapi/FrameworksGuard.h>`), but they reached public-tier modules through fine-grained includes: `<ReactCommon/CallInvoker.h>`, `<ReactCommon/SchedulerPriority.h>`, `<ReactCommon/RuntimeExecutor.h>` and `<cxxreact/JSBigString.h>`. Each of these is protected by `<react/cxxstableapi/UmbrellaGuard.h>`. Exported headers are preprocessed in the consumer's translation unit, so a consumer building with `RN_STRICT_API` would hit the guard through these transitive includes. `RN_ALLOW_FRAMEWORKS` does not suppress the guard.

This change switches the five affected headers (`BridgelessNativeMethodCallInvoker.h`, `BufferedRuntimeExecutor.h`, `CallInvokerImpl.h`, `ReactInstance.h`, `TimerManager.h`) to the `<React/CallInvoker.h>`, `<React/RuntimeExecutor.h>` and `<React/JSBigString.h>` umbrellas. Each umbrella scopes `RN_UMBRELLA_CONTEXT` around its includes, so the guard accepts them. `<ReactCommon/SchedulerPriority.h>` has no include of its own anymore because `<React/CallInvoker.h>` re-exports it. The umbrellas are supersets of the headers they replace, so every previously visible declaration stays available and there is no functional change.

Out of scope: `ReactInstance.cpp` and the module's C++ tests keep the fine-grained includes. They are compiled only within React Native's own build and are never preprocessed by consumers, which matches the umbrellas' documented guidance. Other modules are migrated in separate changes.

Differential Revision: D120316197

@cortinico cortinico left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review automatically exported from Phabricator review in Meta.

…module (react#58551)

Summary:

Changelog: [Internal]

Update the react/renderer/scheduler module to use the `React/RendererCore.h`, `React/Utils.h`, and `React/ComponentRegistry.h` umbrella includes instead of direct ones.

Differential Revision: D120315036
…ct#58550)

Summary:

Changelog: [Internal]

Part of the C++ stable API migration to umbrella includes. Fixes tier reachability violations in the `react/runtime` module.

The headers in this module are "for frameworks" tier (they include `<react/cxxstableapi/FrameworksGuard.h>`), but they reached public-tier modules through fine-grained includes: `<ReactCommon/CallInvoker.h>`, `<ReactCommon/SchedulerPriority.h>`, `<ReactCommon/RuntimeExecutor.h>` and `<cxxreact/JSBigString.h>`. Each of these is protected by `<react/cxxstableapi/UmbrellaGuard.h>`. Exported headers are preprocessed in the consumer's translation unit, so a consumer building with `RN_STRICT_API` would hit the guard through these transitive includes. `RN_ALLOW_FRAMEWORKS` does not suppress the guard.

This change switches the five affected headers (`BridgelessNativeMethodCallInvoker.h`, `BufferedRuntimeExecutor.h`, `CallInvokerImpl.h`, `ReactInstance.h`, `TimerManager.h`) to the `<React/CallInvoker.h>`, `<React/RuntimeExecutor.h>` and `<React/JSBigString.h>` umbrellas. Each umbrella scopes `RN_UMBRELLA_CONTEXT` around its includes, so the guard accepts them. `<ReactCommon/SchedulerPriority.h>` has no include of its own anymore because `<React/CallInvoker.h>` re-exports it. The umbrellas are supersets of the headers they replace, so every previously visible declaration stays available and there is no functional change.

Out of scope: `ReactInstance.cpp` and the module's C++ tests keep the fine-grained includes. They are compiled only within React Native's own build and are never preprocessed by consumers, which matches the umbrellas' documented guidance. Other modules are migrated in separate changes.

Reviewed By: cortinico

Differential Revision: D120316197
j-piasecki added a commit to j-piasecki/react-native that referenced this pull request Sep 29, 2026
…ct#58550)

Summary:

Changelog: [Internal]

Part of the C++ stable API migration to umbrella includes. Fixes tier reachability violations in the `react/runtime` module.

The headers in this module are "for frameworks" tier (they include `<react/cxxstableapi/FrameworksGuard.h>`), but they reached public-tier modules through fine-grained includes: `<ReactCommon/CallInvoker.h>`, `<ReactCommon/SchedulerPriority.h>`, `<ReactCommon/RuntimeExecutor.h>` and `<cxxreact/JSBigString.h>`. Each of these is protected by `<react/cxxstableapi/UmbrellaGuard.h>`. Exported headers are preprocessed in the consumer's translation unit, so a consumer building with `RN_STRICT_API` would hit the guard through these transitive includes. `RN_ALLOW_FRAMEWORKS` does not suppress the guard.

This change switches the five affected headers (`BridgelessNativeMethodCallInvoker.h`, `BufferedRuntimeExecutor.h`, `CallInvokerImpl.h`, `ReactInstance.h`, `TimerManager.h`) to the `<React/CallInvoker.h>`, `<React/RuntimeExecutor.h>` and `<React/JSBigString.h>` umbrellas. Each umbrella scopes `RN_UMBRELLA_CONTEXT` around its includes, so the guard accepts them. `<ReactCommon/SchedulerPriority.h>` has no include of its own anymore because `<React/CallInvoker.h>` re-exports it. The umbrellas are supersets of the headers they replace, so every previously visible declaration stays available and there is no functional change.

Out of scope: `ReactInstance.cpp` and the module's C++ tests keep the fine-grained includes. They are compiled only within React Native's own build and are never preprocessed by consumers, which matches the umbrellas' documented guidance. Other modules are migrated in separate changes.

Reviewed By: cortinico

Differential Revision: D120316197

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. meta-exported

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants